home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 177 / pascal / eroutine.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-09-15  |  20.5 KB  |  765 lines

  1. {$M+}
  2. {$E+}
  3.  
  4.  
  5. PROGRAM Erics_Pascal_routines_Module ;
  6.  
  7. {Modular file started Feb 17,87.}
  8. {modified on March 20, 1987 to add include files.}
  9. {Modified on August 19, 1987 to add shareware info.}
  10.  
  11. {Copyright 1986 by Eric W. Wedaa}
  12. {4620 E. 17th St. }
  13. {Tucson AZ, 85711}
  14.  
  15. CONST
  16. {$I GEMCONST.PAS}
  17. {$I d:\epascons.inc}
  18.  
  19. TYPE
  20. {$I d:\EPasType.inc}
  21. {$I GEMTYPE.PAS}
  22.  
  23. VAR
  24.  
  25.       {$I d:\EPas_Var.inc}
  26.  
  27. {1111111111111111111111111111111111111111111111111111111111}
  28. {1111111111  Subroutines start here   111111111111111111111}
  29. {1111111111111111111111111111111111111111111111111111111111}
  30.  
  31. {$I GEMSUBS.PAS}
  32.  
  33. {11111111111111111111111111111111111111111111111111111111}
  34. {11111111  Clear the window 11111111111111111111111111111}
  35. {11111111111111111111111111111111111111111111111111111111}
  36.  
  37. PROCEDURE Home ;
  38.  BEGIN ;
  39.    HIDE_MOUSE ;
  40.    PAINT_RECT (Xtop, Ytop, Wide, Tall) ;
  41.    SHOW_MOUSE ;
  42.  END ; {procedure Home}
  43.  
  44. {11111111111111111111111111111111111111111111111111111111}
  45. {11111   Waits for and returns a single key 1111111111111}
  46. {11111111111111111111111111111111111111111111111111111111}
  47.  
  48. PROCEDURE Get_Key (VAR
  49.      C : CHAR ;
  50.      VAR
  51.         What_Key : INTEGER) ;
  52.  
  53. VAR
  54.    Event,
  55.    Dummy : INTEGER ;
  56.    Msg_Area : MESSAGE_BUFFER ;
  57.  
  58.  BEGIN ;
  59.    Event :=  GET_EVENT (E_KEYBOARD ,
  60.         0, 0, 0,
  61.         0,
  62.         FALSE, 0, 0, 0, 0,
  63.         FALSE, 0, 0, 0, 0,
  64.         Msg_Area,
  65.         What_Key,
  66.         Dummy, Dummy, Dummy, Dummy, Dummy) ;
  67.    IF (Event & E_KEYBOARD) <>  0
  68.      THEN C :=  CHR (What_Key MOD 256)
  69.      ELSE C :=  ' ' ;
  70.  END ; {procedure Get Key}
  71.  
  72. {11111111111111111111111111111111111111111111111111111111}
  73. {11111   Cheks for User cancellation 11111111111111111111}
  74. {11111111111111111111111111111111111111111111111111111111}
  75.  
  76. FUNCTION Is_Cancel : BOOLEAN ;
  77.  
  78. VAR
  79.    C : CHAR ;
  80.    Event, What_Key,
  81.    Dummy : INTEGER ;
  82.    Msg_Area : MESSAGE_BUFFER ;
  83.  
  84.  BEGIN ;
  85.    Event :=  GET_EVENT (E_KEYBOARD|e_timer ,
  86.         0, 0, 0,
  87.         0,
  88.         FALSE, 0, 0, 0, 0,
  89.         FALSE, 0, 0, 0, 0,
  90.         Msg_Area,
  91.         What_Key,
  92.         Dummy, Dummy, Dummy, Dummy, Dummy) ;
  93.    IF (Event & E_KEYBOARD) <>  0
  94.      THEN C :=  CHR (What_Key MOD 256)
  95.      ELSE C :=  ' ' ;
  96.    IF C = CHR (3)
  97.      THEN Is_Cancel := TRUE
  98.      ELSE Is_Cancel := FALSE ;
  99.  END ; {function Is_Cancel}
  100.  
  101. {11111111111111111111111111111111111111111111111111111111}
  102. {1111111111 Gets the current time for reports. 1111111111}
  103. {11111111111111111111111111111111111111111111111111111111}
  104.  
  105. PROCEDURE Getsttime (VAR
  106.      Time : STRING) ;
  107.  
  108. {    Returns the system time in the form of 'HH:MM:SS _M', }
  109. { where HH is hours, MM is minutes, SS is seconds, and _   }
  110. { is A or P.                                               }
  111.  
  112. VAR
  113.    Xl : LONG_INTEGER ;
  114.    Hours, Minutes, Seconds : LONG_INTEGER ;
  115.  
  116.  BEGIN ;
  117.    Xl :=  CLOCK ;
  118.    Hours :=  Xl DIV 3600 ;
  119.    Minutes :=  ( (Xl MOD 3600) DIV 60) ;
  120.    Seconds :=  ( (Xl MOD 3600) MOD 60) ;
  121.  
  122.    Time[ 0 ] :=  CHR (11) ;
  123.    Time[ 3 ] :=  ':' ;
  124.    Time[ 6 ] :=  ':' ;
  125.    Time[ 1 ] :=  ' ' ;
  126.    Time[ 9 ] :=  ' ' ;
  127.    Time[ 10 ] :=  'A' ;
  128.    Time[ 11 ] :=  'M' ;
  129.    IF Hours = 0 
  130.      THEN 
  131.       BEGIN ;
  132.         Time[ 1 ] :=  '1' ;
  133.         Time[ 2 ] :=  '2' ;
  134.       END
  135.  
  136.      ELSE 
  137.       BEGIN ;
  138.         IF Hours >= 12 
  139.           THEN Time[ 10 ] :=  'P' ;
  140.  
  141.         if hours > 12
  142.            then Hours :=  Hours - 12 ;
  143.  
  144.         IF Hours > 9 
  145.           THEN 
  146.            BEGIN ;
  147.              Time[ 1 ] :=  '1' ;
  148.              Hours :=  Hours - 10 ;
  149.            END ;
  150.         Time[ 2 ] :=  CHR (Hours + 48) ;
  151.       END ; {of else.}
  152.  
  153.    Time[ 4 ] :=  CHR ( (Minutes DIV 10) + 48) ;
  154.  
  155.    IF Minutes >=  10 
  156.      THEN Minutes :=  Minutes MOD 10 ;
  157.  
  158.    Time[ 5 ] :=  CHR (Minutes + 48) ;
  159.  
  160.    Time[ 7 ] :=  CHR ( (Seconds DIV 10) + 48) ;
  161.  
  162.    IF Seconds >=  10 
  163.      THEN Seconds :=  Seconds MOD 10 ;
  164.    Time[ 8 ] :=  CHR (Seconds + 48) ;
  165.  END ; {procedure GetSTTime.}
  166.  
  167.  
  168. {1111111111111111111111111111111111111111111111111111111111111111}
  169. {1111111111111111111111111111111111111111111111111111111111111111}
  170. {1111111111111111111111111111111111111111111111111111111111111111}
  171.  
  172. PROCEDURE St_Date (VAR
  173.      Date : STRING) ;
  174.  
  175. TYPE
  176.    Word = INTEGER ;
  177.  
  178. VAR
  179.    Date_And_Time : LONG_INTEGER ;
  180.    Sys_Date : Word ;
  181.    Sys_Time : Word ;
  182.  
  183.    Month : INTEGER ;
  184.    Day : INTEGER ;
  185.    Year : INTEGER ;
  186.  
  187.    Hour : INTEGER ;
  188.    Minute : INTEGER ;
  189.    Second : INTEGER ;
  190.  
  191.    Sdate : STRING ;
  192.    Stime : STRING ;
  193.  
  194.    Reply : STRING ;
  195.    Retcd : Word ;
  196.  
  197.    FUNCTION Get_Datetime : LONG_INTEGER ;
  198. XBIOS (23) ;
  199.  BEGIN ;
  200.    Date_And_Time :=  Get_Datetime ;
  201.  
  202.    Sys_Date :=  Int (SHR (Date_And_Time, 16) & $0000Ffff) ;
  203.  
  204.    Month :=  SHR (Sys_Date, 5) & $000F ;
  205.    Day :=  Sys_Date & $001F ;
  206.    Year :=  SHR (Sys_Date, 9) & $003F ;
  207.  
  208.    Year :=  Year + 80 ;
  209.    date[0]:=chr(8);
  210.    date[3]:='/';
  211.    date[6]:='/';
  212.    if month>9
  213.      then
  214.      Begin;
  215.           month:=month-10;
  216.           date[1]:='1';
  217.      end
  218.      else date[1]:=' ';
  219.  
  220.    date[2]:=chr(month+48);
  221.  
  222.    if day>9
  223.      then
  224.      Begin;
  225.           date[4]:=chr((day div 10) +48);
  226.           day:=day mod 10;
  227.      end
  228.      else date[4]:=' ';
  229.  
  230.    date[5]:=chr(day+48);
  231.  
  232.    if year>9
  233.      then
  234.      Begin;
  235.           date[7]:=chr((year div 10) +48);
  236.           year:=year mod 10;
  237.      end
  238.      else date[7]:=' ';
  239.  
  240.    date[8]:=chr(year+48);
  241.  END ;
  242.  
  243.  
  244. {11111111111111111111111111111111111111111111111111111111}
  245. {1111Initialize all dialog boxes and load data  111111111}
  246. {11111111111111111111111111111111111111111111111111111111}
  247.  
  248. PROCEDURE Init (VAR
  249.      My_Window : INTEGER) ;
  250.  
  251. VAR
  252.    Title : STRING ;
  253.  
  254. {222222222222222222222222222222222222222222222222222222}
  255. {2222222222  Title Screen        2222222222222222222222}
  256. {222222222222222222222222222222222222222222222222222222}
  257.  
  258.    PROCEDURE Title_Screen ;
  259.  
  260.     BEGIN ;
  261.       Home ;
  262.       DRAW_STRING (10, 32, 'EPasUtil / Eric''s Pascal Utilities') ;
  263.       DRAW_STRING  (10, 40, 
  264.           'Copyright 1986 by Eric W. Wedaa, All Rights Reserved') ;
  265.       DRAW_STRING (10, 48, '4620 E. 17th ') ;
  266.       DRAW_STRING (10, 56, 'Tucson, Az 85711 ') ;
  267.       DRAW_STRING (10, 64,
  268.           'Portions of this product are Copyright(c) 1986, OSS and CCD.') ;
  269.       DRAW_STRING (10, 72, 'Used by Permission of OSS.') ;
  270.       DRAW_STRING (10, 88, 
  271. '    This is a Shareware Program.  If you find it to be of use to you, ') ;
  272.       DRAW_STRING (10, 96, 
  273. 'feel free to send me a check for my time.  ($25.00 recomended.)') ;
  274. draw_String(10,104,
  275. 'I Retain all rights to this program, and ask that it not be distributed');
  276. draw_String(10,112,
  277. 'by any "Pay for a Public Domain disk" companies.');
  278. draw_String(10,120,
  279. 'Please report any bugs or comments to me.');
  280.       DRAW_STRING (10, 128, 'C.I.S.: 76515,2274    BIX: EWEDAA') ;
  281.       DRAW_STRING (10, 136, 
  282.           'You (the USER) are responsible for it''s actions ') ;
  283.       DRAW_STRING (10, 144, 'and it''s output.') ;
  284.       DRAW_STRING (10, 160, ' PLEASE HIT ANY KEY TO CONTINUE ') ;
  285.       SHOW_MOUSE ;
  286.       REPEAT ;
  287.       UNTIL KEYPRESS ;
  288.       Home ;
  289.     END ; {title screen}
  290.  
  291. {------------------------------------------------------------------}
  292.  
  293.  BEGIN ;
  294.  
  295.    DRAW_STRING (10, 40, '  Wait a sec.') ;
  296.    DRAW_STRING (10, 80, '     Loading data...') ;
  297.    G_Blanks := '                                                            ' ;
  298.    G_Blanks :=  CONCAT (G_Blanks, G_Blanks) ;
  299.    G_Blanks := CONCAT (G_Blanks, G_Blanks) ;
  300.    Err_Alerts ;
  301.    Set_Tab_String ;
  302.    Set_Cap_String ;
  303.    Set_Choice_String ;
  304.    Set_Ret_String ;
  305.    Mkdicaps ;
  306.    Mkdichoice ;
  307.    Mkdi_Tabs ;
  308.    Mkdi_Returns ;
  309.    Mkdi_Start ;
  310.    Mkdi_Word ;
  311.  
  312.    INIT_MOUSE ;
  313.    HIDE_MOUSE ;
  314.    Title :=  ' Eric''s Pascal Utilities by Eric Wedaa Ver 0.13.2 ';
  315.    My_Window :=  NEW_WINDOW (G_ALL, Title, 0, 0, 0, 0) ;
  316.    OPEN_WINDOW (My_Window, 0, 0, 0, 0) ;
  317.    TEXT_STYLE (NORMAL) ;
  318.    WORK_RECT (My_Window, Xtop, Ytop, Wide, Tall) ;
  319.    SET_CLIP (Xtop, Ytop, Wide, Tall) ;
  320.    SET_COLOR (WHITE, 1000, 1000, 1000) ;
  321.    TEXT_COLOR (BLACK) ;
  322.    PAINT_COLOR (WHITE) ;
  323.    DRAW_MODE (1) ;
  324.    PAINT_STYLE (1) ;
  325.    PAINT_OUTLINE (FALSE) ;
  326.    Def_Path :=  'd:\*.PAS' ;
  327.    Title_Screen ;
  328.  END ;
  329.  
  330.  
  331. {11111111111111111111111111111111111111111111111111111111}
  332. {11 Overlays the corrected word over the old one. 1111111}
  333. {11111111111111111111111111111111111111111111111111111111}
  334.  
  335. PROCEDURE Overlay (VAR
  336.      Txt_Line : Max_String ;
  337.      Word : STRING ;
  338.      At : INTEGER) ;
  339. VAR
  340.    X : INTEGER ;
  341.  
  342.  BEGIN ;
  343.    X :=  0 ;
  344.    REPEAT ;
  345.       Txt_Line[ At + X ] :=  Word[ X + 1 ] ;
  346.       X :=  X + 1 ;
  347.    UNTIL X = LENGTH (Word) ;
  348.  END ; {of Procedure Overlay}
  349.  
  350.  
  351. {11111111111111111111111111111111111111111111111111111111}
  352. {11 Gets the last non blank character in a line.  1111111}
  353. {11111111111111111111111111111111111111111111111111111111}
  354.  
  355. FUNCTION Last_Char (var
  356.    Txt_Line : Max_String ) : CHAR ;
  357. VAR
  358.    X : INTEGER ; {Loop var.}
  359.  BEGIN ;
  360.    X :=  LENGTH (Txt_Line) ;
  361.    WHILE (Txt_Line[ X ] = ' ' ) 
  362.      AND (X > 1) DO
  363.       X :=  X - 1 ;
  364.    IF (X > 0 ) 
  365.      THEN Last_Char :=  Txt_Line[ X ] 
  366.      ELSE Last_Char :=  ' ' ;
  367.  
  368.  END ; {of Function Last_Char.}
  369.  
  370. {11111111111111111111111111111111111111111111111111111111}
  371. {11111 Gets and returns the prior 2 non blank chars. 1111}
  372. {11111111111111111111111111111111111111111111111111111111}
  373.  
  374. PROCEDURE Prior_Chars ( Position : INTEGER ; 
  375. {                        Place to start looking from.           }
  376.      VAR
  377.         Pchar1, {       Second char before. May be blank.       }
  378.         Pchar2 : CHAR ; { First Char before. Will not be blank. }
  379.      VAR
  380.         Txt_Line : Max_String) ;
  381.  
  382.  BEGIN ;
  383.    Pchar1 :=  ' ' ;
  384.    Pchar2 :=  ' ' ;
  385.    Position :=  Position - 1 ;
  386.  
  387.    WHILE ( ( Position > 0) 
  388.      AND (Txt_Line[ Position ] = ' ') ) DO
  389.       Position :=  Position - 1 ;
  390.  
  391.    IF Position > 0 
  392.      THEN 
  393.       BEGIN ;
  394.         Pchar2 :=  Txt_Line[ Position ] ;
  395.         IF Position > 1 
  396.           THEN Pchar1 :=  Txt_Line[ Position - 1 ] 
  397.           ELSE Pchar1 :=  ' ' ;
  398.       END ;
  399.  
  400.  END ; {Procedure prior_Chars}
  401.  
  402.  
  403. {111111111111111111111111111111111111111111111111111111111111111111}
  404. {1111  Gets and returns the next 2 non blank chars.  11111111111111}
  405. {111111111111111111111111111111111111111111111111111111111111111111}
  406.  
  407. PROCEDURE Next_Chars (VAR
  408.      Txt_Line : Max_String ;
  409.      Position : INTEGER ;
  410.      VAR
  411.         Nchar1, Nchar2 : CHAR) ;
  412.  
  413.  BEGIN ;
  414.    Nchar1 :=  ' ' ;
  415.    Nchar2 :=  ' ' ;
  416.    Position :=  Position + 1 ;
  417.  
  418.    WHILE ( ( Position <=  LENGTH ( Txt_Line ) ) 
  419.      AND (Txt_Line[ Position ] = ' ') ) DO
  420.       Position :=  Position + 1 ;
  421.  
  422.    IF Position < LENGTH (Txt_Line) 
  423.      THEN 
  424.       BEGIN ;
  425.         Nchar1 :=  Txt_Line[ Position ] ;
  426.         Nchar2 :=  Txt_Line[ Position + 1 ] ;
  427.       END
  428.  
  429.      ELSE IF Position = LENGTH (Txt_Line) 
  430.        THEN 
  431.         BEGIN ;
  432.           Nchar1 :=  Txt_Line[ Position ] ;
  433.           Nchar2 :=  CHR (0) ;
  434.  
  435.         END ;
  436.  END ; {Procedure Next_Char}
  437.  
  438.  
  439. {11111111111111111111111111111111111111111111111111111111}
  440. {11 Makes Word into all capital letters. 1111111111111111}
  441. {11111111111111111111111111111111111111111111111111111111}
  442.  
  443. PROCEDURE Make_Caps (VAR
  444.      Word : STRING) ;
  445. VAR
  446.    Position : INTEGER ;
  447.  
  448.  BEGIN ;
  449.    FOR Position :=  1 TO LENGTH (Word) DO
  450.       IF Word[ Position ] IN [ 'a'..'z' ] 
  451.         THEN Word[ Position ] :=  CHR ( ORD ( Word[ Position ] ) - 32) ;
  452.  END ;
  453.  
  454.  
  455.  
  456. {11111111111111111111111111111111111111111111111111111111}
  457. {11  Makes the word 1st letter caps. 11111111111111111111}
  458. {11111111111111111111111111111111111111111111111111111111}
  459.  
  460. PROCEDURE Make_First (VAR
  461.      Word : STRING) ;
  462. VAR
  463.    Position : INTEGER ;
  464.    Was_Underline : BOOLEAN ;
  465.  BEGIN ;
  466.    Position :=  1 ;
  467.    Was_Underline :=  FALSE ;
  468.    IF Word[ Position ] IN [ 'a'..'z' ]
  469.      THEN Word[ Position ] :=  CHR ( ORD ( Word[ Position ] ) - 32 ) ;
  470.    FOR Position :=  2 TO LENGTH (Word) DO
  471.        BEGIN ;
  472.          IF Word[ Position ] = '_'
  473.            THEN Was_Underline :=  TRUE
  474.            ELSE IF ( (Word[ Position ] IN [ 'a'..'z' ] )
  475.              AND (Was_Underline) )
  476.              THEN
  477.               BEGIN ;
  478.                 Word[ Position ] :=  CHR ( ORD ( Word[ Position ] ) - 32) ;
  479.                 Was_Underline :=  FALSE ;
  480.               END
  481.  
  482.            ELSE Was_Underline :=  FALSE ;
  483.        END ;
  484.  END ;
  485.  
  486. {11111111111111111111111111111111111111111111111111111111}
  487. {1111  Makes the Word all lower case. 1111111111111111111}
  488. {11111111111111111111111111111111111111111111111111111111}
  489.  
  490. PROCEDURE Make_Lower (VAR
  491.      Word : STRING) ;
  492. VAR
  493.    Position : INTEGER ;
  494.  
  495.  BEGIN ;
  496.    FOR Position :=  1 TO LENGTH (Word) DO
  497.       IF Word[ Position ] IN [ 'A'..'Z' ] 
  498.         THEN Word[ Position ] :=  CHR ( ORD (Word[ Position ] ) + 32) ;
  499.  END ;
  500.  
  501.  
  502. {11111111111111111111111111111111111111111111111111111111}
  503. {11 Creates new file names.  1111111111111111111111111111}
  504. {11111111111111111111111111111111111111111111111111111111}
  505.  
  506. PROCEDURE Make_Tmp (VAR
  507.      From_File, To_File : STRING ;
  508.      Extender : STRING) ;
  509. VAR
  510.    Position : INTEGER ;
  511.  BEGIN ;
  512.    To_File :=  From_File ;
  513.    Position :=  LENGTH (To_File) ;
  514.  
  515.    IF To_File[ Position - 3 ] = '.'
  516.      THEN To_File[ 0 ] :=  CHR (Position - 4) 
  517.      ELSE IF To_File[ Position - 2 ] = '.'
  518.        THEN To_File[ 0 ] :=  CHR (Position - 3) 
  519.        ELSE IF To_File[ Position - 1 ] = '.'
  520.          THEN To_File[ 0 ] :=  CHR (Position - 2) 
  521.          ELSE IF To_File[ Position ] = '.'
  522.            THEN To_File[ 0 ] :=  CHR (Position - 1) ;
  523.    Position :=  LENGTH (To_File) ;
  524.    To_File[ Position + 1 ] :=  '.' ;
  525.    To_File[ Position + 2 ] :=  Extender[ 1 ] ;
  526.    To_File[ Position + 3 ] :=  Extender[ 2 ] ;
  527.    To_File[ Position + 4 ] :=  Extender[ 3 ] ;
  528.    To_File[ 0 ] :=  CHR (Position + 4) ;
  529.  
  530. {    Make sure we don't return the same file name.     }
  531.    IF To_File = From_File 
  532.      THEN To_File[ 0 ] :=  CHR ( ORD ( To_File[ 0 ] ) - 1 ) ;
  533.  
  534.  END ; {of procedure Make_tmp.}
  535.  
  536. {11111111111111111111111111111111111111111111111111111111}
  537. {11 Used by Get Answers.  1111111111111111111111111111111}
  538. {11111111111111111111111111111111111111111111111111111111}
  539.  
  540. PROCEDURE Strip_Blanks (VAR
  541.      INPUT : STRING) ;
  542. VAR
  543.    Y, X : INTEGER ; {Loop variables.}
  544.  
  545.  BEGIN ;
  546. {strip trailing}
  547.    X :=  ORD (INPUT[ 0 ] ) ;
  548.    WHILE (X > 0) 
  549.      AND (INPUT[ X ] = ' ') DO
  550.       BEGIN ;
  551.          INPUT[ 0 ] :=  CHR ( X - 1 ) ;
  552.          X :=  X - 1 ;
  553.       END ; {While loop.}
  554. {Strip leading}
  555.    X :=  LENGTH (INPUT) ;
  556.    WHILE ( INPUT[ 1 ] = ' ' ) 
  557.      OR ( INPUT[ 1 ] = '0' ) 
  558.      AND ( X > 0 ) DO
  559.       BEGIN ;
  560.          FOR Y :=  1 TO ( X - 1 ) DO
  561.             INPUT[ Y ] :=  INPUT[ Y + 1 ] ;
  562.          INPUT[ 0 ] :=  CHR (X - 1 ) ;
  563.          X :=  X - 1 ;
  564.       END ; {of while loop.}
  565.  END ; {of procedure Strip blanks}
  566.  
  567.  
  568. {11111111111111111111111111111111111111111111111111111111}
  569. {1111   Makes a standard page head for reports.   1111111}
  570. {11111111111111111111111111111111111111111111111111111111}
  571.  
  572. PROCEDURE Make_P_Head (VAR
  573.      Page_Head : Max_String) ;
  574.  
  575. VAR
  576.    Time, {             What time is it?}
  577.    Date : STRING ; {   What's the date?}
  578.  
  579.  BEGIN ;
  580.    Getsttime (Time) ;
  581.    St_Date (Date) ;
  582.    Page_Head :=  CONCAT ('{>>>>>> ', Time, ' Page:001 ', Date, ' ', 
  583.         From_File, ' <<<<<< }') ;
  584.  
  585.    IF (LENGTH (Page_Head) > 80 ) {Trim it if needed so it will fit.}
  586.      THEN DELETE (Page_Head, 31, LENGTH (Page_Head) - 80) ;
  587.  END ; {of procedure Make_P_head.}
  588.  
  589.  
  590. {11111111111111111111111111111111111111111111111111111111}
  591. {111  Increases the program line number counter by 1. 111}
  592. {11111111111111111111111111111111111111111111111111111111}
  593.  
  594. PROCEDURE Increase_Number (VAR
  595.      Number : STRING) ;
  596.  
  597. VAR
  598.    Done : BOOLEAN ; { Are we done changing it yet?               }
  599.    POS : INTEGER ; {  Which position are we looking at/changing? }
  600.  
  601.  BEGIN ;
  602.    POS :=  6 ;
  603.    Done :=  FALSE ;
  604.    WHILE (NOT Done ) 
  605.      AND (POS > 0) DO
  606.       BEGIN ;
  607.          IF ( Number[ POS ] = ' ') {blank.} 
  608.            THEN 
  609.             BEGIN ;
  610.               Number[ POS ] :=  '1' ;
  611.               Done :=  TRUE ;
  612.             END
  613.  
  614. { of number[pos]=' '.}
  615.            ELSE IF (Number[ POS ] < '9') 
  616.              THEN 
  617.               BEGIN ;
  618.                 Done :=  TRUE ;
  619.                 Number[ POS ] :=  CHR (ORD (Number[ POS ] ) + 1) ;
  620.               END
  621.  
  622. {ofnumber[pos]<>' ' and < '9'.}
  623.              ELSE 
  624.               BEGIN ;
  625.                 Number[ POS ] :=  '0' ;
  626.                 POS :=  POS - 1 ;
  627.               END ; {of Number[pos] ='9'.}
  628.       END ; {While not done DO.}
  629.  END ; {Procedure Increase_Line}
  630.  
  631.  
  632.  
  633.  
  634. {222222222222222222222222222222222222222222222222222222222222222222}
  635. {2222  Determines if this line is where we want to start. 222222222}
  636. {222222222222222222222222222222222222222222222222222222222222222222}
  637.  
  638.    PROCEDURE Should_It_Be_On (var 
  639.           Txt_Line : Max_String ;
  640.         Number, 
  641.         Line_Start, Word_Start : STRING ;
  642.         Literal, Comment1, Comment2, 
  643.         Is_Line, Is_Word : BOOLEAN ; {See above routine. ^^^^}
  644.         VAR
  645.            On : BOOLEAN) ; {Do we turn it on at this line?   }
  646.    VAR
  647.       Next, Start : INTEGER ;
  648.       Word : STRING ;
  649.  
  650.     BEGIN ;
  651.       Next :=  1 ;
  652.       Start :=  0 ;
  653.       IF Is_Line 
  654.         THEN 
  655.          BEGIN ;
  656.            IF Number = Line_Start 
  657.              THEN On :=  TRUE ;
  658.          END ;
  659.         IF Is_Word 
  660.           THEN 
  661.            BEGIN ;
  662.              Next :=  1 ;
  663.              Start :=  0 ;
  664.              Word :=  '' ;
  665.              Next_Word (Txt_Line, Word, Start, Next, Literal, 
  666.                   Comment1, Comment2) ;
  667.              IF (Word = 'procedure') 
  668.                OR (Word = 'function') 
  669.                THEN 
  670.                 BEGIN ;
  671.                   Next_Word (Txt_Line, Word, Start, 
  672.                        Next, Literal, Comment1, 
  673.                        Comment2) ;
  674.                   IF Word = Word_Start 
  675.                     THEN On :=  TRUE ;
  676.                 END ;
  677.            END ;
  678.  
  679.     END ; {of Procedure should it be on.}
  680.  
  681.  
  682.  
  683.  
  684. {11111111111111111111111111111111111111111111111111111111}
  685. {11= looks for word in the list of known words.   111111=}
  686. {11111111111111111111111111111111111111111111111111111111}
  687.  
  688. PROCEDURE In_List (Word : STRING ; {The word we're looking for.}
  689.      VAR
  690.         Word_Type : CHAR) ; {What kind of word is it.           }
  691.  
  692. {    This FN checks to see if Word is included in the array of special}
  693. { words.  If it is, it puts the type of word into Word_Type, and      }
  694. { returns a TRUE, Otherwise, it returns a false, and word_Type is set }
  695. { to 8.                                                               }
  696.  
  697. VAR
  698.    Position, {position in the array we're looking at.            }
  699.    Increment : INTEGER ; {How much we change the position by.    }
  700.  
  701.  BEGIN ;
  702.  
  703.    Position :=  Known_Words DIV 2 ;
  704.    Increment :=  Known_Words DIV 4 ;
  705.    Word_Type :=  '8' ;
  706.  
  707.    WHILE ( ( Increment >=  1 ) 
  708.      AND ( Word <>  List[ Position ] ) ) DO
  709.       BEGIN ;
  710.          IF Word > List[ Position ] 
  711.            THEN Position :=  Position + Increment 
  712.            ELSE Position :=  Position - Increment ;
  713.          Increment :=  Increment DIV 2 ;
  714.       END ; {While}
  715.  
  716.    IF Word = List[ Position ] 
  717.      THEN Word_Type :=  Kind[ Position ] 
  718.      ELSE 
  719.       BEGIN ; {Else}
  720.         IF Word < List[ Position ] 
  721.           THEN 
  722.            BEGIN ;
  723.              WHILE ( (Word < List[ Position ] ) 
  724.                AND ( Position > 1) ) DO
  725.                 Position :=  Position - 1 ;
  726.              IF Word = List[ Position ] 
  727.                THEN Word_Type :=  Kind[ Position ] ;
  728.            END
  729.  
  730.           ELSE 
  731.            BEGIN ;
  732.              WHILE ( (Word > List[ Position ] ) 
  733.                AND (Position < Known_Words ) ) DO
  734.                 Position :=  Position + 1 ;
  735.              IF Word = List[ Position ] 
  736.                THEN Word_Type :=  Kind[ Position ] ;
  737.            END ;
  738.       END ;
  739.  END ; {Procedure In_List}
  740.  
  741.  
  742. {11111111111111111111111111111111111111111111111111111111}
  743. {1111 Clears all Form Feeds from the text line.  11111111}
  744. {11111111111111111111111111111111111111111111111111111111}
  745.  
  746. Procedure Clear_Form_Feed (var
  747.      txt_line:max_String);
  748. var
  749. x, position:integer;
  750. begin;
  751.      position:=pos(chr(12),txt_line);
  752.      while Position>0 do
  753.       begin;
  754.           for x:= position to ord(txt_line[0]) do
  755.                txt_line[x]:=txt_line[x+1];
  756.           txt_line[0]:=chr( ord(txt_line[0]) -1);
  757.           position:=pos(chr(12),txt_line);
  758.       end;{of while.}
  759. end;{of procedure clear form feed. }
  760.  
  761.  
  762.  
  763. begin;
  764. end.
  765.